---@class GT.linkSfx 闪电特效
---@field linkSfx LinkSfx 闪电特效对象
GT.linkSfx = class()

---@class linkSfx_data
---@field linkSfx LinkSfx 闪电特效对象


---@param data linkSfx_data
function GT.linkSfx:ctor(data)
    self.linkSfx = data.linkSfx
end

---@param linkSfx LinkSfx 闪电特效对象
---@return GT.linkSfx
function GT.linkSfx.obj(linkSfx)
    return new(GT.linkSfx, { linkSfx = linkSfx })
end

--- 创建单位到点闪电特效
---@param sfx_res_id SfxKey 特效编号
---@param source_unit GT.unit 起点单位
---@param source_socket Str 起点单位挂接点名称
---@param target_point GT.point 终点
---@param target_height Fixed 终点高度
---@param duration Float 持续时间
---@return GT.linkSfx
function GT.linkSfx.create_link_sfx_from_unit_to_point(sfx_res_id, source_unit, source_socket, target_point,target_height, duration)
    return GT.linkSfx.obj(game_api.create_link_sfx_from_unit_to_point(sfx_res_id, source_unit.unit, source_socket,target_point.point, target_height, duration))
end

--- 创建单位到单位闪电特效
---@param sfx_res_id SfxKey 特效编号
---@param source_unit GT.unit 起点单位
---@param source_socket Str 起点单位挂接点名称
---@param target_unit GT.unit 终点单位
---@param target_socket Str 起点单位挂接点名称
---@param duration Float 持续时间
---@return GT.linkSfx
function GT.linkSfx.create_link_sfx_from_unit_to_unit(sfx_res_id, source_unit, source_socket, target_unit, target_socket,duration)
    return GT.linkSfx.obj(game_api.create_link_sfx_from_unit_to_unit(sfx_res_id, source_unit.unit, source_socket,target_unit.unit, target_socket, duration))
end

--- 创建点到单位闪电特效
---@param sfx_res_id SfxKey 特效编号
---@param source_point GT.point 起点
---@param source_height Fixed 起点高度
---@param source_unit GT.unit 终点单位
---@param source_socket Str 起点单位挂接点名称
---@param duration Float 持续时间
---@return GT.linkSfx
function create_link_sfx_from_point_to_unit(sfx_res_id, source_point, source_height, source_unit, source_socket, duration)
    return GT.linkSfx.obj(game_api.create_link_sfx_from_point_to_unit(sfx_res_id, source_point.point, source_height,source_unit.unit, source_socket, duration))
end

--- 创建点到点闪电特效
---@param sfx_res_id SfxKey 特效编号
---@param source_point GT.point 起点
---@param source_height Fixed 起点高度
---@param target_point GT.point  终点
---@param target_height Fixed 终点高度
---@param duration Float 持续时间
---@return GT.linkSfx
function GT.linkSfx.create_link_sfx_from_point_to_point(sfx_res_id, source_point, source_height, target_point,
                                                        target_height, duration)
    ---@type linkSfx_data
    local data = {
        linkSfx = game_api.create_link_sfx_from_point_to_point(sfx_res_id, source_point.point, source_height,
            target_point.point, target_height, duration)
    }
    return new(GT.linkSfx, data)
end

--- 设置闪电特效的位置点
---@param source_or_target LinkSfxPointType 起点/终点
---@param point GT.point 点
---@param height Float 高度
function GT.linkSfx:set_link_sfx_point(sfx_entity, source_or_target, point, height)
    game_api.set_link_sfx_point(self.linkSfx, source_or_target, point.point, height)
end

--- 设置闪电特效单位附加点
---@param source_or_target LinkSfxPointType 起点/终点
---@param unit GT.unit 单位
---@param socket Str 单位挂接点
function GT.linkSfx:set_link_sfx_unit_socket(source_or_target, unit, socket)
    game_api.set_link_sfx_unit_socket(self.linkSfx, source_or_target, unit.unit, socket)
end

--- 移除特效
---@param immediately Bool 立即移除表现
function GT.linkSfx:remove_link_sfx(immediately)
    game_api.remove_link_sfx(self.linkSfx, immediately)
end

--- 设置特效是否显示
---@param b_show Bool 是否显示
function GT.linkSfx:enable_link_sfx_show(b_show)
    game_api.remove_link_sfx(self.linkSfx, b_show)
end
